/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Biblioteca;

import java.io.File;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.AudioHeader;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;

/**
 * Clase que edita el archivo mp3 leido con los tags obtenidos de un objeto Cancion suministrado
 * @author ISG2
 */
public class EditorTags {

    /**
     * Método principal. Edita un archivo con los tags de una Cancion.
     * @param cancion
     */
    public void edit(Cancion cancion) {
        try {
            /* Lee el archivo desde la ruta,
             * lee la cabecera y el tag del archivo
             * carga los tags en la clase cancion
             */
            File archivo = new File(cancion.getRuta());
            AudioFile f = AudioFileIO.read(archivo);
            Tag tag = f.getTag();
            AudioHeader header = f.getAudioHeader();

            String artista = cancion.cadenaDesconocido;
            String album = cancion.cadenaDesconocido;
            String genero = cancion.cadenaDesconocido;

            tag.setField(FieldKey.TITLE, cancion.getTitulo());
            if (cancion.getArtista() != null) {
                artista = cancion.getArtista().getNombre();
            }
            tag.setField(FieldKey.ARTIST, artista);

            if (cancion.getAlbum() != null) {
                album = cancion.getAlbum().getNombre();
            }
            tag.setField(FieldKey.ALBUM, album);
            if (cancion.getAlbum() != null) {
                album = cancion.getAlbum().getNombre();
            }
            if (cancion.getGenero() != null) {
                genero = cancion.getGenero().getNombre();
            }
            tag.setField(FieldKey.GENRE, genero);

            tag.setField(FieldKey.YEAR, cancion.getTag("año"));
            tag.setField(FieldKey.TRACK, cancion.getTag("pista"));
            //tag.setField(Artwork);
            //aplica los cambios hechos en el tag al archivo
            f.commit();

        } catch (Exception e) {
            // Imprime error ocurrido
            //TODO: tratar la excepción para archivos corruptos, de manera que permita continuar la ejecución.
            System.out.println(e.getMessage());
        }
    }
}
